ЖДУ 2024-2025
    Головна
    Змагання
    Лекції
    Курси
    Дописи
    Лабораторні роботи
    Архів Олімпіад
Файлові потоки. Відкриття та закриття
Увійти

Файлові потоки. Відкриття та закриття

Для роботи з файлами в стандартній бібліотеці визначено заголовний файл fstream , який визначає базові типи для читання та запису файлів. Зокрема, це:

ifstream // : для читання з файлу
ofstream // : для запису у файл
fstream // : поєднує запис та читання

Для роботи з даними типу wchar_t для цих потоків визначено двійники:

wifstream
wofstream
wfstream

Відкриття файлу

При операціях із файлом спочатку необхідно відкрити файл за допомогою функції open() . Ця функція має дві версії:

open( шлях до файла )

open(шлях до файла , режим відкриття файла)

Щоб відкрити файл у функцію, необхідно передати шлях до файлу у вигляді рядка. Також можна вказати режим відкриття. Список доступних режимів відкриття файлу:

ios::in : файл відкривається для введення (читання). Може бути встановлений тільки для об'єкта ifstream або fstream

ios::out : файл відкривається для виведення (запису). При цьому старі дані видаляються. Може бути встановлений тільки для об'єкта ofstream або fstream

ios::app : файл відкривається для запису. Старі дані не видаляються.

ios::ate : після відкриття файлу переміщує покажчик у кінець файлу

ios::trunc : файл усікається під час відкриття. Можливо, якщо також встановлено режим out

ios::binary : файл відкривається у бінарному режимі

Якщо при відкритті режим не вказано, то за умовчанням для об'єктів ofstream застосовується режим ios::out, а для об'єктів ifstream - режим ios::in. Для об'єктів fstream поєднуються режими ios::outта ios::in.

std::ofstream out;          // потік для запису

out.open("output.txt");     // відкриваємо файл для запису
     
std::ofstream out2;

out2.open("output1.txt", std::ios::app); // відкриваємо файл для дозапису
 
std::ofstream out3;

out2.open("file.txt", std::ios::out | std::ios::trunc); // встановлюємо декілька режимів
 
std::ifstream in;       // потік для читання
in.open("input.txt"); // відкриваємо файл для читання
 
std::fstream fs;        // потік для читання-запису
fs.open("in-out.txt"); // відкриваємо файл для чтитання-запису
C++
17 lines
556 bytes

Функцію open для відкриття файлу необов'язково використовувати. В якості альтернативи можна також використовувати конструктор об'єктів-потоків та передавати в них шлях до файлу та режим відкриття:

fstream(шлях)$fstream( шлях, режим відкриття файла)

При виклику конструктора, який передано шлях до файлу, цей файл буде автоматично відкриватися:

std::ofstream out("output.txt");
std::ifstream in("input.txt");
std::fstream fs("in-out-put.txt", std::ios::app);

У цьому випадку передбачається, що файл *.txt" розташовується в тій же папці, де файл програми.

Взагалі використання конструкторів для відкриття потоку є кращим, оскільки визначення змінної, що представляє файловий потік, вже припускає, що цей потік буде відкритий для читання або запису. А використання конструктора позбавить ситуації, коли ми забудемо відкрити потік, але при цьому почнемо його використовувати.

У процесі роботи ми можемо перевірити, чи файл за допомогою функції is_open() . Якщо файл відкритий, вона повертає true:

std::ifstream in;       // потік для читання
in.open("hello.txt"); // відкриваємо файл для читання

// якщо  файл відкрито
if (in.is_open())
{
}
C++
7 lines
152 bytes

Закриття файлу

Після завершення роботи з файлом слід закрити за допомогою функції close() . Також варто відзначити, що при виході об'єкта потоку з області видимості він видаляється, і у нього автоматично викликається функція close.

#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    ofstream out;          // потік для запису
    out.open("input.txt"); // відкриваємо файл для запису
    out.close();            // закрываємо файл
 
    ifstream in;       // потік для читання
    in.open("output.txt"); // відкриваємо файл для читання
    in.close();             // закриваєм файл
 
    fstream fs;        // потік для читання-запису
    fs.open("in-out.txt"); // відкриваємо файл для читання-запису
    fs.close();             // закриваємо файл
}
C++
18 lines
564 bytes
У цій статті
  • Файлові потоки. Відкриття та закриття
  • Відкриття файлу
  • Закриття файлу